
// @file stack_link.h
// @author 玄绮 (shijiahansi@qq.com)
// 
// @version 0.1
// @date 2021-06-25
// @copyright Copyright (c) 2021



#ifndef __STACK_H__
#define __STACK_H__
#include <stdlib.h>
#include "ds_common.h"

typedef struct Stack Stack;
typedef struct Stack *StackPtr;

typedef struct Stack_Node Stack_Node;
typedef struct Stack_Node *Stack_NodePtr;


//   返回一个初始化的新指针
        //  成功 返回一个初始化的新指针
        //  失败 返回NULL

Stack *stack_creat(int sizeof_type);


// 销毁栈
//  return  == 0            成功，销毁栈
//          == -EINVAL      失败，参数非法
//          == -ENOSPC      失败，任务数组满
//          == -ENOMEM      失败，内存分配有误
int stack_destroy(StackPtr thisc);


// 清空栈
int stack_clear(StackPtr thisc);


// 若栈为空，则返回TRUE, 否则返回FALSE
bool stack_empty(StackPtr thisc);

// 返回栈中元素的个数
int stack_size(StackPtr thisc);


// 若栈不为空，则返回栈顶元素指针，否则返回NULL
const void *stack_top(StackPtr thisc);


// 插入元素data为新的栈顶元素
bool stack_push(StackPtr thisc, const void *data);


// 若栈不为空，则删除栈顶元素
bool stack_pop(StackPtr thisc);

#endif //__STACK_H__